844-NOGALIS (844-664-2547)
Nogalis, Inc.
  • Link to Facebook
  • Link to X
  • Link to LinkedIn
  • Link to Mail
  • Company
    • News, Events and Articles
    • About Us
  • Products
    • Infor Lawson Data Archive
    • PeopleSoft Data Archive
    • Oracle Data Archive
  • Services
    • Infor Lawson Support
    • Infor Lawson / CloudSuite Consulting
  • Education & Training
  • Support
  • Contact Us
  • Click to open the search input field Click to open the search input field Search
  • Menu Menu

Archive for category: Articles

You are here: Home1 / News, Events and Articles2 / Articles

How to Resolve Lawson PR140 Fatal Table error

Articles, Frontpage Article, News

Follow this simple guide to learn how to resolve the Lawson PR140 Fatal Table error – See errors files.

A Lawson PR140 (Earnings and Deductions Calculation) fatal table error can mena many things like  the payroll job hit bad data, a lock conflict, or a stuck run flag in your environment files. You may come across this error:

PRDED-DED-TABLE must be increased; Cur size 0500

 

The error occurs when an employee has more than 500 deductions tied to them. This includes all open and closed deductions.

 

To fix this, apply the latest Secure Act 2.0 Patch from Infor since this is addressed in JT-1371703

Alternatively, you could also fix this error via CTP 123335.

07/31/2026
https://www.nogalis.com/wp-content/uploads/2026/07/Lawson-PR140-Fatal-Table-error-See-errors-files.jpg 470 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-07-31 08:29:502026-07-29 08:39:22How to Resolve Lawson PR140 Fatal Table error

Passing Parameters to a Thread Target in Python

Articles, Frontpage Article, News

When working with multithreading in Python, a common question is whether you can pass parameters to the function executed by a thread. The short answer is yes — Python’s threading. Thread class provides built-in support for this.

This post walks through the correct and idiomatic ways to pass arguments to a thread target function.


The Basic Thread Pattern

A typical thread is created like this:

import threading

 

t = threading.Thread(target=compare_totals)

t.start()

This works only if compare_totals takes no parameters. If your function requires inputs, you must supply them explicitly.


Passing Positional Arguments with args

Use the args parameter to pass positional arguments to the target function. args must be a tuple.

def compare_totals(source, target):

print(source, target)

 

t = threading.Thread(

target=compare_totals,

args=(“athena”, “oracle”)

)

t.start()

Each element in the tuple maps to a parameter in the function signature.


Passing Keyword Arguments with kwargs

If you prefer named arguments (or want clearer intent), use kwargs:

def compare_totals(source, target):

print(source, target)

 

t = threading.Thread(

target=compare_totals,

kwargs={

“source”: “athena”,

“target”: “oracle”

}

)

t.start()

This approach is especially helpful when a function takes many parameters or optional values.


Passing a Single Object (Such as a Dictionary)

A common pattern is to pass a single dictionary containing multiple configuration values:

def compare_totals(params):

print(params)

 

params = {

“engine”: “mysql”,

“schema”: “public”,

“table”: “employees”

}

 

t = threading.Thread(

target=compare_totals,

args=(params,)

)

t.start()

⚠️ Important:
When passing a single argument via args, you must include a trailing comma: (params,). Without it, Python will not treat the value as a tuple.


Summary

  • Use args for positional arguments
  • Use kwargs for named arguments
  • Always pass args as a tuple, even for a single value
  • Thread targets behave just like normal function calls — the thread simply invokes the function with the supplied parameters

Understanding this pattern makes it much easier to parallelize work cleanly and safely in Python.

 

07/28/2026
https://www.nogalis.com/wp-content/uploads/2026/07/Passing-Parameters-to-a-Thread-Target-in-Python.jpg 470 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-07-28 08:58:422026-07-24 13:00:43Passing Parameters to a Thread Target in Python

Why os.getenv() Ignores Your .env File (and How to Fix It)

Articles, Frontpage Article, News

If you’ve ever logged an environment variable in Python and thought, “Why is this value coming from my system instead of my .env file?” — you’re not alone.

This is a very common source of confusion when working with AWS credentials, profiles, or configuration-driven applications.

Let’s break down why this happens, how environment variable precedence works, and how to make your .env file behave the way you expect.


The Core Issue: .env Files Are Not Automatic

Calling:

os.getenv(“AWS_PROFILE”)

does not read your .env file by default.

Python only knows about variables that already exist in the process environment. A .env file is just a text file until you explicitly load it.

That’s why libraries like python-dotenv exist.


Loading the .env File Correctly

To load values from a .env file into the environment, you must do this explicitly and early:

from dotenv import load_dotenv

load_dotenv()

After this runs, variables defined in .env become available via os.getenv().

However, this alone does not guarantee your .env values will be used.


Environment Variable Precedence (The Real Gotcha)

Even when load_dotenv() is working correctly, system-level environment variables always take precedence.

If a variable exists in both places:

  1. System environment (PowerShell, shell, OS)
  2. .env file

Python will use the system value, not the .env value.

This is intentional behavior.


Forcing .env to Override System Variables

If you want the .env file to override existing environment variables, you must opt in:

load_dotenv(override=True)

Without override=True, python-dotenv will not replace values that already exist in the environment.


Verifying Where the Value Is Coming From

To debug what’s happening, it helps to inspect both sources:

from dotenv import load_dotenv, dotenv_values

import os

 

load_dotenv(override=False)

 

print(“Value in .env:”, dotenv_values().get(“AWS_PROFILE”))

print(“Value in environment:”, os.getenv(“AWS_PROFILE”))

This makes it immediately clear whether:

  • the .env file was loaded
  • the system environment is overriding it

Common Causes of .env Being Ignored

  1. The variable is already set in your shell

On Windows (PowerShell):

echo $Env:AWS_PROFILE

If this prints a value, it will override .env unless override=True is used.


  1. The .env file isn’t in the working directory

load_dotenv() searches relative to the current working directory. If your script runs from a subfolder, the file may not be found.

You can confirm this with:

import os

print(os.getcwd())

Or specify the file explicitly:

load_dotenv(dotenv_path=”/path/to/.env”, override=True)


  1. The .env syntax is invalid

The .env file must use simple KEY=value syntax.

Correct:

AWS_PROFILE=dev

Incorrect:

AWS_PROFILE = “dev”


  1. .env is loaded too late

Always call load_dotenv() before importing modules that read environment variables.


Key Takeaways

  • getenv() only reads environment variables, not .env files
  • .env files must be explicitly loaded
  • System environment variables override .env by default
  • Use override=True if you want .env to win
  • Always verify where values are coming from when debugging configuration issues

Understanding these rules will save you hours of frustration—especially when working with AWS profiles, credentials, and multi-environment setups.

 

07/20/2026
https://www.nogalis.com/wp-content/uploads/2026/07/Why-osgetenv-Ignores-Your-env-File-and-How-to-Fix-It.jpg 470 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-07-20 07:13:012026-07-15 10:16:15Why os.getenv() Ignores Your .env File (and How to Fix It)

Changing the Portal Timeout Property

Articles, Frontpage Article, News

To change the TimeoutRedirectDisable property, you need to delete this using ssoconfig and re-add it with the correct value. this needs a restart to take effect.

 

Follow these steps to add the service properties on Infor Lawson Server:

  1. Access the Infor Lawson server with the lawson user
  2. Enter ssoconfig -c and provide the password
  3. Select 5 Manage Lawson Services
  4. Select 10 Manage Service Properties
  5. Select 2 Delete Service Property
  6. Enter the TimeoutRedirectDisable that is set to True
    • Enter the SERVICE NAME: SSOP
    • Enter the service PROPERTY NAME: TimeoutRedirectDisable
  7. Select 10 to Manage Service Properties again (or go back to step 1)
  8. Select 1 to Add new service property
    • Enter the SERVICE NAME: SSOP
    • Enter the service PROPERTY NAME: TimeoutRedirectDisable
    • Enter the service PROPERTY VALUE: False
  9. Select 5 Exit

 

Restart LSF.

07/15/2026
https://www.nogalis.com/wp-content/uploads/2026/07/Changing-the-Portal-Timeout-property.jpg 470 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-07-15 08:29:492026-07-13 09:53:03Changing the Portal Timeout Property

Fixing “Invalid S3 Location” Errors When Running Athena Queries with Boto3

Articles, Frontpage Article, News

If you’ve ever run an Amazon Athena query using Boto3 and received an error stating that the S3 output location is invalid, you may have double-checked everything only to find:

  • The S3 bucket exists
  • The bucket is in the correct AWS region
  • The output prefix is valid
  • Permissions look correct

Yet the query still fails.

This is a surprisingly common issue, and the root cause is often not the S3 path itself.


Why This Error Happens

Athena is a regional service. When you start a query, it runs in a specific AWS region, and both of the following must be in that same region:

  1. The Athena database
  2. The S3 bucket used for query results

What trips people up is that the region used by the Boto3 Athena client determines where the query runs.

If the client is created without explicitly specifying a region, Boto3 falls back to:

  • Your AWS CLI default region, or
  • Environment configuration

If that default region does not match where your Athena database lives, Athena may report errors such as:

  • “Invalid S3 location”
  • “Database does not exist”

Even when the S3 bucket itself is perfectly valid.


The Key Fix: Specify the Region Explicitly

To avoid ambiguity, always create your Athena client with an explicit region that matches your Athena database:

import boto3

 

athena = boto3.client(

‘athena’,

region_name=’us-west-2′  # must match your Athena database region

)

This ensures:

  • The query runs in the correct Athena region
  • The S3 output location is evaluated correctly
  • Athena can see both the database and the results bucket

Additional Best Practices

  1. Always Use a Trailing Slash for OutputLocation

Athena expects the output location to be a directory, not a file:

ResultConfiguration={

‘OutputLocation’: ‘s3://your-results-bucket/athena/’

}

  1. Verify S3 Permissions

The IAM role or credentials running the query must be able to write to the bucket:

  • s3:PutObject
  • s3:GetBucketLocation
  • (Optionally) s3:ListBucket

Athena will create the output prefix automatically, but it must have permission to do so.

  1. Don’t Assume S3 Region Is Enough

Even if your S3 bucket is in the correct region, Athena still fails if:

  • The Athena client is created in a different region
  • The database exists elsewhere

Will Explicitly Setting the Region Break Other Regions?

No. Explicitly setting region_name will not fail just because another region exists.

It only fails if:

  • The Athena database is not in that region, or
  • The S3 results bucket is not in that region

As long as all three align—client, database, and S3 bucket—the query will work.


Final Takeaway

When you see an “invalid S3 location” error in Athena, don’t assume the bucket is the problem.

More often than not, the issue is that:

Athena is running in the wrong region.

Explicitly setting the region on your Boto3 Athena client is the simplest and most reliable fix—and it prevents a lot of head-scratching later.

07/10/2026
https://www.nogalis.com/wp-content/uploads/2026/07/Fixing-Invalid-S3-Location-Errors-When-Running-Athena-Queries-with-Boto3.jpg 470 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-07-10 08:04:262026-07-08 13:03:37Fixing “Invalid S3 Location” Errors When Running Athena Queries with Boto3

How to fix Lawson RQC Account Cost Capped

Articles, Frontpage Article, News

You may sometimes find that your account cost is capped or budget exceeded, causing an error in Lawson RQC. Refer to these simple and easy steps to learn how to fix Lawson RQC Account Cost Capped.

In RQC (Lawson Requisition Center), the cost is capped at 502.86 as shown in the screen shot below.

 

To adjust this, in the Lawson portal, go to RQ04 and Inquire on the Requester.

Then set these two flags to “Yes” to allow overriding costs (see screen shot below).

That is all there is to it! Cap should be lifted now in Requisition Center for the requester.

 

07/07/2026
https://www.nogalis.com/wp-content/uploads/2026/07/How-to-fix-Lawson-RQC-Account-Cost-Capped.jpg 470 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-07-07 08:09:392026-07-01 13:36:15How to fix Lawson RQC Account Cost Capped

Weekly Patch Notification: July 4, 2026

Articles, Frontpage Article, Patches
Read more
07/04/2026
https://www.nogalis.com/wp-content/uploads/2026/07/Weekly-Patch-Notification-July-4-2026.jpg 427 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-07-04 20:53:142026-07-20 15:55:09Weekly Patch Notification: July 4, 2026

Connecting to Oracle with SQLAlchemy and cx_Oracle

Articles, Frontpage Article, News

When working with Oracle databases in Python, a common approach is to use SQLAlchemy as the ORM or query layer and cx_Oracle as the underlying database driver. One of the most common stumbling blocks is getting the connection string syntax exactly right.

This post walks through the correct oracle+cx_oracle connection string formats, with examples for the most common Oracle connection scenarios.


Basic Connection String Format

When using SQLAlchemy with cx_Oracle, the connection URL starts with:

oracle+cx_oracle://

From there, the full format depends on whether you connect using a service name, SID, or TNS alias.


Connecting with a Service Name (Recommended)

Most modern Oracle databases use a service name rather than a SID.

Syntax

oracle+cx_oracle://username:password@host:port/?service_name=SERVICE

Example

from sqlalchemy import create_engine

 

engine = create_engine(

“oracle+cx_oracle://desi:tiger@dbserver.example.com:1521/?service_name=ORCLPDB1”

)


Connecting with a SID

Some legacy systems still require a SID.

Syntax

oracle+cx_oracle://username:password@host:port/?sid=SID

Example

engine = create_engine(

“oracle+cx_oracle://desi:tiger@dbserver.example.com:1521/?sid=ORCL”

)


Using a TNS Alias

If your Oracle client is configured with a tnsnames.ora file and the appropriate environment variables (ORACLE_HOME or TNS_ADMIN) are set, you can connect using a TNS alias.

Syntax

oracle+cx_oracle://username:password@TNS_ALIAS

Example

engine = create_engine(

“oracle+cx_oracle://desi:tiger@PRODDB”

)

This approach is often useful in enterprise environments where connection details are centrally managed.


Handling Special Characters in Passwords

Because SQLAlchemy connection strings are URLs, special characters in passwords (@, /, :, etc.) must be URL-encoded.

Example

from urllib.parse import quote_plus

 

password = quote_plus(“p@ss/w:rd”)

 

engine = create_engine(

f”oracle+cx_oracle://desi:{password}@dbserver:1521/?service_name=ORCLPDB1″

)

Failing to encode the password is a common cause of confusing connection errors.


Important Notes

  • cx_Oracle requires Oracle Client libraries, such as Oracle Instant Client.
  • SQLAlchemy automatically constructs the underlying Oracle DSN for you based on the connection URL.
  • For new projects, Oracle recommends the newer oracledb driver (which supports a thin mode without client libraries), but cx_Oracle remains widely used and supported in existing systems.

Final Thoughts

Getting the Oracle connection string right saves a lot of debugging time. Whether you’re using a service name, SID, or TNS alias, the key is understanding how SQLAlchemy maps the URL into an Oracle DSN and ensuring credentials are properly encoded.

Once that’s in place, connecting to Oracle with Python becomes straightforward and reliable.

07/02/2026
https://www.nogalis.com/wp-content/uploads/2026/07/Connecting-to-Oracle-with-SQLAlchemy-and-cx_Oracle.jpg 470 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-07-02 08:32:162026-06-30 13:37:47Connecting to Oracle with SQLAlchemy and cx_Oracle

Weekly Patch Notification: June 27, 2026

Articles, Frontpage Article, Patches
Read more
06/27/2026
https://www.nogalis.com/wp-content/uploads/2026/07/Weekly-Patch-Notification-June-27-2026.jpg 427 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-06-27 19:50:212026-07-20 15:52:13Weekly Patch Notification: June 27, 2026

How to Upgrade an AWS Aurora Instance to an r7g Instance Type

Articles, Frontpage Article, News

If you’re running Amazon Aurora and want to take advantage of the Graviton3-based r7g instance types for better performance and efficiency, you might notice that sometimes the option doesn’t appear in the AWS console. Here’s a breakdown of why that happens and how to fix it.


Why You Might Not See r7g in the Console

When modifying an Aurora instance, only certain instance types are shown in the dropdown. If you’re missing r7g options, the most common reasons are:

  1. Aurora Engine Version
    • r7g instances require Aurora MySQL 3.x+ (based on MySQL 8.0) or Aurora PostgreSQL 15+.
    • Older versions, like Aurora MySQL 2.x, do not support r7g.
  2. Cluster Mode
    • r7g is supported only in provisioned clusters.
    • Aurora Serverless v1 and some global database setups do not allow Graviton3-based instances.
  3. Region Limitations
    • Not every AWS region offers all instance classes.
    • Make sure r7g is available in your region.

How to Check Your Aurora Version

To determine whether your Aurora cluster supports r7g:

  1. Open the RDS console.
  2. Navigate to Databases and click your Aurora cluster.
  3. Check the Aurora MySQL or Aurora PostgreSQL version under the instance details.

How to Upgrade to r7g

If your version and cluster type support r7g, here’s how to upgrade:

Using the AWS Management Console

  1. Open your Aurora instance in RDS.
  2. Click Modify.
  3. Under DB instance class, select the r7g instance type you want (e.g., db.r7g.2xlarge).
  4. Choose whether to apply immediately or during the next maintenance window.
  5. Click Continue, then Modify DB Instance.

⚠️ Note: Applying immediately will cause a brief downtime.


Using the AWS CLI

The console sometimes hides options. You can try the CLI for a more direct approach:

aws rds modify-db-instance \

–db-instance-identifier your-db-instance-id \

–db-instance-class db.r7g.2xlarge \

–apply-immediately

If your instance is not compatible, AWS will return an error specifying why (e.g., unsupported engine version).


Key Takeaways

  • Only Aurora MySQL 3.x+ or Aurora PostgreSQL 15+ support r7g.
  • Ensure your cluster is provisioned, not serverless.
  • Check regional availability if the instance class is missing.
  • Use the CLI if the console doesn’t show the instance type — it provides clearer error messages.

Upgrading to r7g can deliver better performance per dollar, thanks to AWS Graviton3 processors — but compatibility depends on your Aurora version, cluster mode, and region.

 

06/24/2026
https://www.nogalis.com/wp-content/uploads/2026/06/How-to-Upgrade-an-AWS-Aurora-Instance-to-an-r7g-Instance-Type.jpg 470 470 Angeli Menta https://www.nogalis.com/wp-content/uploads/2013/04/logo-with-slogan-good.png Angeli Menta2026-06-24 08:41:422026-06-11 10:48:01How to Upgrade an AWS Aurora Instance to an r7g Instance Type
Page 1 of 117123›»

LEGACY ERP DATA ARCHIVE SOLUTION



Discover how our clients are leveraging AWS services to archive their Legacy ERP data and provide ubiquitous access to users via a light-weight, secure, and read-only web interface. Secure, Fast, Reliable, and Cost Effective. That is the promise of APIX. Follow the link below to find out more and book a discovery call with our data archive specialist.

BOOK DEMO

© Copyright - Nogalis, Inc. 2024
  • Legal
  • Privacy
  • Contact Us
Scroll to top Scroll to top Scroll to top